/**

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢？

注意：给定 n 是一个正整数。

示例 1：

输入： 2
输出： 2
解释： 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶
示例 2：

输入： 3
输出： 3
解释： 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

 */

/**
 * 解题思路：
 *  这题是真正意义上的算法题 刚开始做的时候始终是没有没有任何的规律
 *  直到我写出了前五个 2到5阶的步数 分别是 2,3,5,8
 *  诶？？ 这不是 斐波那契数列吗？？？？
 *
 *  所以： 第 N 步 等于的是 （N-1）+(N-2) 所以根据这个公司计算即可
 *    这里运用的是数组的方法 存值的方式（并非递归的方式）来计算的 也比较的巧妙
 */

/**
 * @param {number} n
 * @return {number}
 */
var climbStairs = function (n) {
  const ent = [];
  ent[1] = 1;
  ent[2] = 2;
  if (n <= 2) {
    return ent[n];
  }

  for (let i = 3; i <= n; i++) {
    ent[i] = ent[i - 1] + ent[i - 2];
  }
  return ent[ent.length - 1];
};

console.log(climbStairs(2));
